package com.dingding.manager.modules.system.controller;

import java.util.List;

import javax.annotation.Resource;
import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dingding.manager.common.beans.sys.Organization;
import com.dingding.manager.common.dao.Page;
import com.dingding.manager.common.exception.BussinessException;
import com.dingding.manager.common.exception.enums.BizExceptionEnum;
import com.dingding.manager.core.shiro.ShiroKit;
import com.dingding.manager.core.util.ToolUtil;
import com.dingding.manager.modules.dirver.dto.RespResult;
import com.dingding.manager.modules.system.dto.organization.ReqOrganizationAddDTO;
import com.dingding.manager.modules.system.dto.organization.ReqOrganizationListDTO;
import com.dingding.manager.modules.system.dto.organization.ResOrganizationDTO;
import com.dingding.manager.modules.system.service.OrganizationService;

/**
* @ClassName: OrganizationController 
* @Description: 机构controller
* @author SUNZHICHENG 
* @date 2016年12月5日 下午8:31:25 
* @version V2.6.2
 */
@Controller
@RequestMapping(value="sys/v1/organization")
public class OrganizationController {
	
	@Resource(name="organizationService")
	OrganizationService organizationService;
	
	/**
	 * @Description: 公司列表        
	 * @date 2016年12月6日 下午3:47:23
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/list")
	@ResponseBody
	public RespResult<ResOrganizationDTO> getOrganizationList(ReqOrganizationListDTO reqOrganizationListDTO,Integer start, Integer length){
		Page<ResOrganizationDTO>  list=organizationService.getOrganizationList(reqOrganizationListDTO,start,length);
		RespResult<ResOrganizationDTO> respResult=new RespResult<ResOrganizationDTO>();
		respResult.setAaData(list.getList());
		respResult.setiTotalRecords(list.getTotalPage());
		respResult.setiTotalDisplayRecords(list.getTotalRow());
		return respResult;
	}
	
	/**
	 * @Description: 公司详情        
	 * @date 2016年12月6日 下午3:48:26
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/info")
	@ResponseBody
	public ResOrganizationDTO getOrganizationById(Integer organizationId){
		if (ToolUtil.isEmpty(organizationId)) {
			return null;
		}
		return organizationService.getOrganizationById(organizationId);
	}
	
	/**
	 * @Description: 删除公司        
	 * @date 2016年12月6日 下午3:56:38
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/del")
	@ResponseBody
	public boolean deleteOrganization(Integer organizationId){
		if (ToolUtil.isEmpty(organizationId)) {
			return false;
		}
		boolean deleteOrganization = organizationService.deleteOrganization(organizationId);
		return deleteOrganization;
	}
	
	/**
	 * @Description:启用/禁用        
	 * @date 2016年12月6日 下午3:57:35
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/state")
	@ResponseBody
	public boolean modifyOrganizationState(Integer organizationId,Integer state){
		if (ToolUtil.isEmpty(organizationId) && ToolUtil.isEmpty(state)) {
			return false;
		}
		return organizationService.modifyOrganizationState(organizationId, state);
	}
	
	
	/**
	 * @Description: 添加公司        
	 * @date 2016年12月6日 下午3:58:30
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/add")
	@ResponseBody
	public void addOrganization(@Valid ReqOrganizationAddDTO reqOrganizationAddDTO,BindingResult result){
		if (result.hasErrors()) {
			throw new BussinessException(BizExceptionEnum.REQUEST_NULL); 
		}
		organizationService.addOrganization(reqOrganizationAddDTO);
	}
	
	/**
	 * @Description: 修改公司        
	 * @date 2016年12月6日 下午4:02:21
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/update")
	@ResponseBody
	public void updateOrganization(@Valid ReqOrganizationAddDTO reqOrganizationAddDTO,BindingResult result){
		if (result.hasErrors() && ToolUtil.isEmpty(reqOrganizationAddDTO.getOrganizationId())) {
			throw new BussinessException(BizExceptionEnum.REQUEST_NULL); 
		}
	
		 organizationService.updateOrganization(reqOrganizationAddDTO);
	}
	
	/**
	 * @Description: 根据公司类型获取公司列表
	 * @param organizationType        
	 * @date 2016年12月7日 下午2:01:18
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/listByType")
	@ResponseBody
	public List<Organization> getOrganizationListByType(Integer organizationType){
		if (ToolUtil.isEmpty(organizationType)) {
			return null;
		}
		return organizationService.getOrganizationListByType(organizationType);
	}
	
	/**
	 * @Description: 根据省份、城市获取机构     
	 * @date 2016年12月7日 下午8:17:47
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/listId")
	@ResponseBody
	public List<ResOrganizationDTO> getOrganization(Integer proviceId, Integer sysCityId) {
		List<ResOrganizationDTO> organization = organizationService.getOrganization(proviceId, sysCityId);
		return organization;
	}
	
	/**
	 * @Description: 按照登录用户的数据范围获取所能访问的公司列表
	 * @date 2016年12月27日 下午4:19:59
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/organizationList")
	@ResponseBody
	public List<Organization> getOrganizationListByDataScope(){
		return ShiroKit.getOrganizationList();
	}
}
